package com.itheima.reflect1;

import java.lang.reflect.Method;
import java.util.ArrayList;

public class Demo3 {

    public static void main(String[] args) throws Exception {

        //反射的基本作用：
        //1. 获取类的全部成分然后进行操作
        //2. 破坏封装性
        //3. 可以绕过泛型的约束

        //核心作用：适合做Java的框架，主流的框架基本上都会基于反射设计一些通用的功能

        ArrayList<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        list.add("张三");
        //list.add(20);     //报错
        //list.add(true);   //报错
        System.out.println(list);

        Class c1 = list.getClass();
        //获取ArrayList类的add方法
        Method add = c1.getDeclaredMethod("add", Object.class);
        //触发list集合对象的add方法执行
        add.invoke(list, 20);       //翻墙
        add.invoke(list, true);     //翻墙

        System.out.println(list);


    }
}
